/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package service;


import dados.ComunicacaoBD;
import dados.MontadorBusca;
import entidade.IEntidade;
import excecoes.ValidacaoSemanticaException;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.parsers.ParserConfigurationException;
import tradutor.Tradutor;
import validacao.ConfigValidacaoSemantica;
import validacao.GerenciadorSemantico;
import validacao.ValidacaoSemantica;

/**
 *
 * @author Emanoel
 */
@WebService()
public class EasyQuery {

/**
     * Web service operation
     */
    @WebMethod(operationName = "executar")
    public String executar(@WebParam(name = "xml")
    String xml) {
        try {
            String retorno = "";
            IEntidade entidade = Tradutor.traduzir(xml);            
            ValidacaoSemantica.validacaoSemantica(entidade);
            String query = MontadorBusca.montarBusca(entidade);
            ResultSet rs = ComunicacaoBD.executarQuery(query, entidade.getBanco());
            ArrayList<ConfigValidacaoSemantica> configs = GerenciadorSemantico.carregarDefinicoesDB();
            ConfigValidacaoSemantica escolhido = null;
            for (int i = 0; i < configs.size(); i++) {
                escolhido = configs.get(i);
            }
            retorno += "<resultado>";
            while(rs.next()){
                retorno += "<" + escolhido.getName() + ">";
                for (int i = 0; i < escolhido.getColumns().size(); i++) {
                    String coluna = escolhido.getColumns().get(i);
                    retorno += "<" + coluna + ">" + rs.getString(coluna) + "</" + coluna + ">";
                }
                retorno += "</" + escolhido.getName() + ">";
            }
            retorno += "</resultado>";
            return retorno;
        } catch (SQLException ex) {
            return "<error>" + ex.getMessage() + "</error>";
        } catch (ParserConfigurationException ex) {
            return "<error>" + ex.getMessage() + "</error>";
        } catch (IOException ex) {
            return "<error>" + ex.getMessage() + "</error>";
        } catch (ValidacaoSemanticaException ex) {
            return "<error>" + ex.getMessage() + "</error>";
        }
    }

}
